package com.bi.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 主题场景模板实体类
 * 
 * @author BI Platform Team
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tb_theme_scenario_template")
public class ThemeScenarioTemplate implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 模板名称（系统内部标识）
     */
    private String name;

    /**
     * 显示名称
     */
    private String displayName;

    /**
     * 模板描述
     */
    private String description;

    /**
     * 模板分类
     */
    private String category;

    /**
     * 场景类型
     */
    private ThemeScenario.ScenarioType scenarioType;

    /**
     * 应用类型
     */
    private ThemeScenario.ApplicationType applicationType;

    /**
     * 布局类型
     */
    private LayoutType layoutType;

    /**
     * 默认布局配置JSON
     */
    private String defaultLayoutConfig;

    /**
     * 默认主题配置JSON
     */
    private String defaultThemeConfig;

    /**
     * 默认样式配置JSON
     */
    private String defaultStyleConfig;

    /**
     * 预设组件配置JSON
     */
    private String presetComponentsConfig;

    /**
     * 预览图片URL
     */
    private String previewUrl;

    /**
     * 缩略图URL
     */
    private String thumbnailUrl;

    /**
     * 模板配置JSON
     */
    private String templateConfig;

    /**
     * 是否系统模板
     */
    private Boolean isSystemTemplate;

    /**
     * 是否推荐
     */
    private Boolean isRecommended;

    /**
     * 使用次数
     */
    private Integer usageCount;

    /**
     * 评分
     */
    private Double rating;

    /**
     * 标签JSON数组
     */
    private String tags;

    /**
     * 排序序号
     */
    private Integer sortOrder;

    /**
     * 状态
     */
    private TemplateStatus status;

    /**
     * 创建人
     */
    private String creator;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新人
     */
    private String updater;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 版本号
     */
    @Version
    private Integer version;

    /**
     * 布局类型枚举
     */
    public enum LayoutType {
        GRID("网格布局"),
        FREE("自由布局"),
        FLOW("流式布局"),
        TABS("标签页布局"),
        ACCORDION("手风琴布局"),
        SPLIT("分割布局"),
        FIXED("固定布局"),
        RESPONSIVE("响应式布局");

        private final String description;

        LayoutType(String description) {
            this.description = description;
        }

        public String getDescription() {
            return description;
        }
    }

    /**
     * 模板状态枚举
     */
    public enum TemplateStatus {
        DRAFT("草稿"),
        ACTIVE("激活"),
        INACTIVE("禁用"),
        DEPRECATED("已废弃"),
        DELETED("已删除");

        private final String description;

        TemplateStatus(String description) {
            this.description = description;
        }

        public String getDescription() {
            return description;
        }
    }
}